package modelo;

import java.io.Serializable;
import java.util.List;

import org.joda.time.Duration;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.uqbar.commons.model.UserException;

import database.Tienda;
import applicationModels.IntObservable;

public class Horario implements Serializable{
	
	private IntObservable inicio;
	private IntObservable fin;
	private LocalTime inicio2;
	private LocalTime fin2;
	
	public Horario(IntObservable inicio, IntObservable fin){
		//Revisar que onda, porque siempre deberian llegar horarios correctos sin errores de usuario
//		if(inicio.getValor() > (fin.getValor())){
//			throw new UserException("El horario no puede empezar antes de terminar.");
//		}
		this.inicio=inicio;
		this.fin=fin;
		this.inicio2 = new LocalTime(inicio.getValor());
		this.fin2 = new LocalTime(fin.getValor());
	}
	
	public Horario(){
		inicio= new IntObservable(0);
		fin=new IntObservable(23);
	}

	public Duration duracion(){
		return new Duration(inicio2.toDateTimeToday(),fin2.toDateTimeToday());
	}
	
	public boolean contieneA(Horario otroHorario){
		return (inicio2.isBefore(otroHorario.inicio2)||inicio2.isEqual(otroHorario.inicio2))&&
				(fin2.isAfter(otroHorario.fin2)||fin2.isEqual(otroHorario.fin2));
	}

	public IntObservable getInicio() {
		return inicio;
	}

	public IntObservable getFin() {
		return fin;
	}

	public List<IntObservable> calcularInicio() {
		return Tienda.getInstance().listaInts(0, 19);
	}

	public List<IntObservable> calcularFin() {
		return Tienda.getInstance().listaInts(this.inicio.getValor() + 4, 23);
	}

	public void setInicio(IntObservable inicio) {
		this.inicio = inicio;
	}

	public void setFin(IntObservable fin) {
		this.fin = fin;
	}
	
	public String toIntervalString(){
		return "("+inicio.getValor()+"hs a "+fin.getValor()+"hs)";
	}
	
	
	

}

